home *** CD-ROM | disk | FTP | other *** search
/ PC for Alla 2003 May / PFA0503.iso / fullversioner / webmenubuilder / WebMenuBuilder2demo / setup.exe / {app} / help / SearchToHTML.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-03-22  |  19.4 KB  |  881 lines

  1. import java.applet.Applet;
  2. import java.awt.BorderLayout;
  3. import java.awt.Button;
  4. import java.awt.Checkbox;
  5. import java.awt.Color;
  6. import java.awt.Component;
  7. import java.awt.Container;
  8. import java.awt.Dimension;
  9. import java.awt.Event;
  10. import java.awt.FlowLayout;
  11. import java.awt.Frame;
  12. import java.awt.Graphics;
  13. import java.awt.Insets;
  14. import java.awt.Label;
  15. import java.awt.Panel;
  16. import java.awt.TextField;
  17. import java.io.BufferedInputStream;
  18. import java.io.DataInputStream;
  19. import java.io.FilterInputStream;
  20. import java.io.IOException;
  21. import java.net.MalformedURLException;
  22. import java.net.URL;
  23. import java.net.URLEncoder;
  24. import java.util.StringTokenizer;
  25.  
  26. public class SearchToHTML extends Applet implements Runnable {
  27.    private static final String version = "SearchToHTML 2.15 August 23, 2001";
  28.    private static final String description = "A client-side search engine that displays its search results as HTML.";
  29.    private static final String author = "David Faden <gilbertnews@hotmail.com>";
  30.    private static String appletInfo = "SearchToHTML 2.15 August 23, 2001" + System.getProperty("line.separator") + "David Faden <gilbertnews@hotmail.com>" + System.getProperty("line.separator") + "A client-side search engine that displays its search results as HTML.";
  31.    private static String[][] parameterInfo = new String[][]{{"files", "url list", "documents to search"}, {"target", "string", "target frame for search results"}, {"contextsize", "integer", "size of context including match (deprecated)"}, {"leadingcontextlength", "integer", "size of leading context, including match"}, {"trailingcontextlength", "integer", "size of trailing context"}, {"max_num_matches", "integer", "maximum number of results"}, {"resultspage", "url", "search results receiver/displayer"}, {"waitforall", "boolean", "display results as received (deprecated)"}, {"search_btn_txt", "string", "text for \"search\" button"}, {"stop_btn_txt", "string", "text for \"stop\" button"}, {"xhtml_chkbx_txt", "string", "text for \"Exclude HTML\" checkbox"}, {"exact_chkbx_txt", "string", "text for \"Exact matches only\" checkbox"}, {"searchbox_label_txt", "string", "label for search box"}, {"bgcolor", "color", "applet background color"}, {"fgcolor", "color", "applet foreground color"}, {"searchboxbgcolor", "color", "search box background color"}, {"searchboxfgcolor", "color", "search box foreground color"}, {"startwords", "string", "initial text of search box"}, {"buttonbgcolor", "color", "button background color"}, {"buttonfgcolor", "color", "button foreground color"}, {"hide_exact_chkbx", "boolean", "hide \"Exact matches only\" checkbox"}, {"hide_xhtml_chkbx", "boolean", "hide \"Exclude HTML\" checkbox"}, {"checkboxbgcolor", "color", "checkbox background color"}, {"checkboxfgcolor", "color", "checkbox foreground color"}, {"ignore_tags", "boolean", "ignore tags"}, {"xhtml_chkbx_checked", "boolean", "check \"Exclude HTML\" checkbox (deprecated)"}, {"exact_matches_only", "boolean", "accept exact matches only"}, {"exact_chkbx_checked", "boolean", "check \"Exact matches only\" checkbox (deprecated)"}, {"hide_progress_bar", "boolean", "hide progress bar"}, {"progress_bar_completed_color", "color", "color for completion"}, {"progress_bar_remaining_color", "color", "color for remaining"}, {"progress_bar_text_color", "color", "color for progress bar text"}, {"progress_bar_message", "string", "progress bar message"}, {"hide_button", "boolean", "hide search/stop button"}, {"hide_searchbox_label", "boolean", "hide search box label"}, {"progress_bar_height", "integer", "height of progress bar"}, {"hide_progress_bar_message", "boolean", "hide progress bar message"}, {"progress_bar_width", "integer", "width of progress bar"}, {"searchbox_size", "integer", "search box column width"}, {"send_context", "boolean", "send context"}, {"send_titles", "boolean", "send titles"}, {"send_info", "boolean", "send info"}, {"send_anchors", "boolean", "send anchors"}, {"phrase_searches_only", "boolean", "phrase searches only"}, {"start_pattern", "string", "start searching on match"}, {"stop_pattern", "string", "stop searching on match"}, {"files_file", "string", "file containing list of files to search"}, {"match_all_terms", "boolean", "must all terms match"}, {"show_match_all_terms_checkbox", "boolean", "hide match all terms checkbox"}, {"match_all_terms_checkbox_txt", "string", "text of the match terms checkbox"}};
  32.    private SearchDocument[] documents;
  33.    private int numberOfDocuments;
  34.    private int maxNumOfMatches;
  35.    private Button stopStartButton;
  36.    private Checkbox ignoreTagsCheckbox;
  37.    private Checkbox exactCheckbox;
  38.    private Checkbox matchAllTermsCheckbox;
  39.    private TextField searchBox;
  40.    private ProgressBar progressBar;
  41.    private boolean displayProgressBar;
  42.    private boolean progressBarHasBeenUsed;
  43.    private Insets insets = new Insets(2, 2, 2, 2);
  44.    private String target;
  45.    private boolean displayMessage;
  46.    private String message;
  47.    private static final String searchTokenSeparators = "\" \t\r\n,";
  48.    private String resultsPage;
  49.    private boolean sendContext;
  50.    private boolean sendTitles;
  51.    private boolean sendDocumentInfo;
  52.    private boolean sendAnchors;
  53.    private boolean phraseSearchesOnly;
  54.    private boolean waitForAll;
  55.    private String searchBase;
  56.    private boolean searching = false;
  57.    private String search_btn_txt;
  58.    private String stop_btn_txt;
  59.    private Frame frame;
  60.    private Thread searchThread;
  61.    public static final boolean DEBUG = false;
  62.  
  63.    public void init() {
  64.       URL var1 = ((Applet)this).getDocumentBase();
  65.       this.searchBase = var1.getProtocol() + "://" + var1.getHost() + var1.getFile();
  66.       int var2 = this.searchBase.lastIndexOf(47);
  67.       int var3 = this.searchBase.lastIndexOf(46);
  68.       if (var3 > var2) {
  69.          this.searchBase = this.searchBase.substring(0, var2 + 1);
  70.       }
  71.  
  72.       int var4 = 15;
  73.       String var5 = ((Applet)this).getParameter("contextsize");
  74.       if (var5 == null) {
  75.          var5 = ((Applet)this).getParameter("leadingcontextlength");
  76.       }
  77.  
  78.       if (var5 != null) {
  79.          try {
  80.             var4 = Integer.parseInt(var5);
  81.             if (var4 < 0) {
  82.                var4 = 0;
  83.             }
  84.          } catch (NumberFormatException var70) {
  85.             System.err.println("  Problem with contextsize/leadingcontextlength parameter.");
  86.             ((Throwable)var70).printStackTrace();
  87.          }
  88.       }
  89.  
  90.       int var6 = 0;
  91.       String var7 = ((Applet)this).getParameter("trailingcontextlength");
  92.       if (var7 != null) {
  93.          try {
  94.             var6 = Integer.parseInt(var7);
  95.             if (var6 < 0) {
  96.                var6 = 0;
  97.             }
  98.          } catch (NumberFormatException var69) {
  99.             System.err.println("  Invalid value for trailingcontextlength parameter.");
  100.             ((Throwable)var69).printStackTrace();
  101.          }
  102.       }
  103.  
  104.       String var8 = ((Applet)this).getParameter("files");
  105.       String var10 = ((Applet)this).getParameter("files_file");
  106.       DataInputStream var11 = null;
  107.       if (var10 != null) {
  108.          try {
  109.             URL var14 = new URL(this.searchBase + var10);
  110.             StringBuffer var15 = new StringBuffer(128);
  111.             var11 = new DataInputStream(new BufferedInputStream(var14.openStream()));
  112.  
  113.             for(String var16 = var11.readLine(); var16 != null; var16 = var11.readLine()) {
  114.                var15.append(var16);
  115.                var15.append(' ');
  116.             }
  117.  
  118.             String var9 = var15.toString();
  119.             if (var8 == null) {
  120.                var8 = var9;
  121.             } else {
  122.                var8 = var8 + ',' + var9;
  123.             }
  124.          } catch (MalformedURLException var71) {
  125.             ((Throwable)var71).printStackTrace();
  126.          } catch (IOException var72) {
  127.             ((Throwable)var72).printStackTrace();
  128.          } finally {
  129.             if (var11 != null) {
  130.                try {
  131.                   ((FilterInputStream)var11).close();
  132.                } catch (IOException var63) {
  133.                   ((Throwable)var63).printStackTrace();
  134.                }
  135.             }
  136.  
  137.          }
  138.       }
  139.  
  140.       if (var8 != null && var8.length() != 0) {
  141.          StringTokenizer var12 = new StringTokenizer(var8, "\n\r \t,", false);
  142.          int var13 = var12.countTokens();
  143.          this.documents = new SearchDocument[var13];
  144.          String var74 = ((Applet)this).getParameter("stop_pattern");
  145.          String var75 = ((Applet)this).getParameter("start_pattern");
  146.          this.numberOfDocuments = 0;
  147.  
  148.          for(int var17 = 0; var17 < var13; ++var17) {
  149.             String var76 = var12.nextToken();
  150.  
  151.             try {
  152.                this.documents[this.numberOfDocuments] = new SearchDocument(var1, var76, var4, var6);
  153.                if (var75 != null) {
  154.                   this.documents[this.numberOfDocuments].setStartPattern(var75);
  155.                }
  156.  
  157.                if (var74 != null) {
  158.                   this.documents[this.numberOfDocuments].setStopPattern(var74);
  159.                }
  160.  
  161.                ++this.numberOfDocuments;
  162.             } catch (MalformedURLException var68) {
  163.                ((Throwable)var68).printStackTrace();
  164.             }
  165.          }
  166.  
  167.          if (this.numberOfDocuments == 0) {
  168.             System.err.println("SearchToHTML error: Nothing to search.");
  169.          } else {
  170.             if (this.numberOfDocuments < this.documents.length) {
  171.                SearchDocument[] var18 = this.documents;
  172.                this.documents = new SearchDocument[this.numberOfDocuments];
  173.                System.arraycopy(var18, 0, this.documents, 0, this.numberOfDocuments);
  174.                Object var77 = null;
  175.             }
  176.  
  177.             String var78 = ((Applet)this).getParameter("max_num_matches");
  178.             if (var78 == null) {
  179.                this.maxNumOfMatches = this.numberOfDocuments;
  180.             } else {
  181.                try {
  182.                   this.maxNumOfMatches = Integer.parseInt(var78);
  183.                   if (this.maxNumOfMatches > this.numberOfDocuments) {
  184.                      this.maxNumOfMatches = this.numberOfDocuments;
  185.                   } else if (this.maxNumOfMatches <= 0) {
  186.                      this.maxNumOfMatches = 1;
  187.                   }
  188.                } catch (NumberFormatException var67) {
  189.                   System.err.println("Invalid value for \"max_num_matches\" parameter");
  190.                   ((Throwable)var67).printStackTrace();
  191.                   this.maxNumOfMatches = this.numberOfDocuments;
  192.                }
  193.             }
  194.  
  195.             this.target = ((Applet)this).getParameter("target");
  196.             if (this.target == null) {
  197.                this.target = "_top";
  198.             }
  199.  
  200.             this.resultsPage = ((Applet)this).getParameter("resultspage");
  201.             if (this.resultsPage == null) {
  202.                this.resultsPage = "searchresults.html";
  203.             }
  204.  
  205.             this.waitForAll = !"false".equalsIgnoreCase(((Applet)this).getParameter("waitforall"));
  206.             if ("_top".equals(this.target) || "_self".equals(this.target)) {
  207.                this.waitForAll = true;
  208.             }
  209.  
  210.             this.sendContext = !"false".equalsIgnoreCase(((Applet)this).getParameter("send_context"));
  211.             this.sendTitles = !"false".equalsIgnoreCase(((Applet)this).getParameter("send_titles"));
  212.             this.sendDocumentInfo = !"false".equalsIgnoreCase(((Applet)this).getParameter("send_info"));
  213.             this.sendAnchors = !"false".equalsIgnoreCase(((Applet)this).getParameter("send_anchors"));
  214.             this.phraseSearchesOnly = "true".equalsIgnoreCase(((Applet)this).getParameter("phrase_searches_only"));
  215.  
  216.             for(Container var19 = ((Component)this).getParent(); var19 != null; var19 = ((Component)var19).getParent()) {
  217.                if (var19 instanceof Frame) {
  218.                   this.frame = (Frame)var19;
  219.                   break;
  220.                }
  221.             }
  222.  
  223.             this.search_btn_txt = this.getParameter("search_btn_txt", "Search");
  224.             this.stop_btn_txt = this.getParameter("stop_btn_txt", "Stop");
  225.             String var20 = this.getParameter("xhtml_chkbx_txt", "Exclude HTML");
  226.             String var21 = this.getParameter("exact_chkbx_txt", "Exact matches only");
  227.             String var22 = this.getParameter("match_all_terms_checkbox_txt", "Require all terms");
  228.             String var23 = this.getParameter("searchbox_label_txt", "Search for:");
  229.             Color var24 = getColor(this.getParameter("bgcolor", "gray"));
  230.             if (var24 != null) {
  231.                ((Component)this).setBackground(var24);
  232.             }
  233.  
  234.             Color var25 = getColor(this.getParameter("fgcolor", "black"));
  235.             if (var25 != null) {
  236.                ((Component)this).setForeground(var25);
  237.             }
  238.  
  239.             ((Container)this).setLayout(new BorderLayout());
  240.             Panel var26 = new Panel();
  241.             ((Container)var26).setLayout(new BorderLayout());
  242.             Panel var27 = new Panel();
  243.             ((Container)var27).setLayout(new FlowLayout(0));
  244.             if (!"true".equals(((Applet)this).getParameter("hide_searchbox_label"))) {
  245.                ((Container)var27).add(new Label(var23, 0));
  246.             }
  247.  
  248.             int var28 = 20;
  249.             String var29 = ((Applet)this).getParameter("searchbox_size");
  250.             if (var29 != null) {
  251.                try {
  252.                   var28 = Integer.parseInt(var29);
  253.                   if (var28 < 5) {
  254.                      var28 = 5;
  255.                   } else if (var28 > 100) {
  256.                      var28 = 100;
  257.                   }
  258.                } catch (NumberFormatException var66) {
  259.                   System.err.println("Problem with searchbox_size parameter");
  260.                   ((Throwable)var66).printStackTrace();
  261.                }
  262.             }
  263.  
  264.             this.searchBox = new TextField(var28);
  265.             Color var30 = getColor(this.getParameter("searchboxbgcolor", "white"));
  266.             if (var30 != null) {
  267.                this.searchBox.setBackground(var30);
  268.             }
  269.  
  270.             Color var31 = getColor(this.getParameter("searchboxfgcolor", "black"));
  271.             if (var31 != null) {
  272.                this.searchBox.setForeground(var31);
  273.             }
  274.  
  275.             String var32 = ((Applet)this).getParameter("startwords");
  276.             if (var32 != null) {
  277.                this.searchBox.setText(var32);
  278.             }
  279.  
  280.             ((Container)var27).add(this.searchBox);
  281.             this.stopStartButton = new Button(this.search_btn_txt);
  282.             Color var33 = getColor(((Applet)this).getParameter("buttonbgcolor"));
  283.             if (var33 != null) {
  284.                this.stopStartButton.setBackground(var33);
  285.             }
  286.  
  287.             Color var34 = getColor(((Applet)this).getParameter("buttonfgcolor"));
  288.             if (var34 != null) {
  289.                this.stopStartButton.setForeground(var34);
  290.             }
  291.  
  292.             if (!"true".equals(((Applet)this).getParameter("hide_button"))) {
  293.                Panel var35 = new Panel();
  294.                ((Container)var35).setLayout(new FlowLayout(2));
  295.                ((Container)var35).add(this.stopStartButton);
  296.                ((Container)var27).add(var35);
  297.             }
  298.  
  299.             ((Container)var26).add("North", var27);
  300.             this.ignoreTagsCheckbox = new Checkbox(var20);
  301.             this.exactCheckbox = new Checkbox(var21);
  302.             this.matchAllTermsCheckbox = new Checkbox(var22);
  303.             boolean var79 = !"true".equalsIgnoreCase(((Applet)this).getParameter("hide_exact_chkbx"));
  304.             boolean var36 = !"true".equalsIgnoreCase(((Applet)this).getParameter("hide_xhtml_chkbx"));
  305.             boolean var37 = "true".equalsIgnoreCase(((Applet)this).getParameter("show_match_all_terms_checkbox")) && !this.phraseSearchesOnly;
  306.             if (var79 || var36 || var37) {
  307.                Color var38 = getColor(((Applet)this).getParameter("checkboxbgcolor"));
  308.                if (var38 != null) {
  309.                   this.ignoreTagsCheckbox.setBackground(var38);
  310.                   this.exactCheckbox.setBackground(var38);
  311.                   this.matchAllTermsCheckbox.setBackground(var38);
  312.                }
  313.  
  314.                Color var39 = getColor(((Applet)this).getParameter("checkboxfgcolor"));
  315.                if (var39 != null) {
  316.                   this.ignoreTagsCheckbox.setForeground(var39);
  317.                   this.exactCheckbox.setForeground(var39);
  318.                   this.matchAllTermsCheckbox.setForeground(var39);
  319.                }
  320.  
  321.                Panel var40 = new Panel();
  322.                ((Container)var40).setLayout(new FlowLayout(0));
  323.                if (var79) {
  324.                   ((Container)var40).add(this.exactCheckbox);
  325.                }
  326.  
  327.                if (var36) {
  328.                   ((Container)var40).add(this.ignoreTagsCheckbox);
  329.                }
  330.  
  331.                if (var37) {
  332.                   ((Container)var40).add(this.matchAllTermsCheckbox);
  333.                }
  334.  
  335.                ((Container)var26).add("Center", var40);
  336.             }
  337.  
  338.             String var80 = ((Applet)this).getParameter("ignore_tags");
  339.             if (var80 != null) {
  340.                if ("true".equals(var80)) {
  341.                   this.ignoreTagsCheckbox.setState(true);
  342.                }
  343.             } else if ("true".equals(((Applet)this).getParameter("xhtml_chkbx_checked"))) {
  344.                this.ignoreTagsCheckbox.setState(true);
  345.             }
  346.  
  347.             String var81 = ((Applet)this).getParameter("exact_matches_only");
  348.             if (var81 != null) {
  349.                if ("true".equalsIgnoreCase(var81)) {
  350.                   this.exactCheckbox.setState(true);
  351.                }
  352.             } else if ("true".equals(((Applet)this).getParameter("exact_chkbx_checked"))) {
  353.                this.exactCheckbox.setState(true);
  354.             }
  355.  
  356.             if ("true".equalsIgnoreCase(((Applet)this).getParameter("match_all_terms"))) {
  357.                this.matchAllTermsCheckbox.setState(true);
  358.             }
  359.  
  360.             this.displayProgressBar = !"true".equals(((Applet)this).getParameter("hide_progress_bar"));
  361.             this.progressBarHasBeenUsed = false;
  362.             if (this.displayProgressBar) {
  363.                Panel var82 = new Panel();
  364.                ((Container)var82).setLayout(new FlowLayout(0));
  365.                Color var41 = getColor(this.getParameter("progress_bar_completed_color", "blue"));
  366.                Color var42 = getColor(this.getParameter("progress_bar_remaining_color", "cyan"));
  367.                Color var43 = getColor(this.getParameter("progress_bar_text_color", "black"));
  368.                String var44 = this.getParameter("progress_bar_message", "Searching... ");
  369.                this.progressBar = new ProgressBar(this.numberOfDocuments, var41, var42, var43, var44);
  370.                Dimension var45 = ((Component)this).size();
  371.                String var47 = ((Applet)this).getParameter("progress_bar_height");
  372.                int var46;
  373.                if (var47 == null) {
  374.                   var46 = 20;
  375.                } else {
  376.                   try {
  377.                      var46 = Integer.parseInt(var47);
  378.                      if (var46 <= 0) {
  379.                         var46 = 20;
  380.                      } else if (var46 > var45.height) {
  381.                         var46 = var45.height;
  382.                      }
  383.                   } catch (NumberFormatException var65) {
  384.                      System.err.println("Problem with progress_bar_height parameter");
  385.                      ((Throwable)var65).printStackTrace();
  386.                      var46 = 20;
  387.                   }
  388.                }
  389.  
  390.                String var49 = ((Applet)this).getParameter("progress_bar_width");
  391.                int var48;
  392.                if (var49 == null) {
  393.                   var48 = var45.width - 20;
  394.                } else {
  395.                   try {
  396.                      var48 = Integer.parseInt(var49);
  397.                      if (var48 <= 0) {
  398.                         var48 = var45.width - 20;
  399.                      } else if (var48 > var45.width) {
  400.                         var48 = var45.width;
  401.                      }
  402.                   } catch (NumberFormatException var64) {
  403.                      System.err.println("Problem with progress_bar_width parameter");
  404.                      ((Throwable)var64).printStackTrace();
  405.                      var48 = var45.width - 20;
  406.                   }
  407.                }
  408.  
  409.                this.progressBar.resize(var48, var46);
  410.                this.progressBar.setPercentMessageVisible(!"true".equals(((Applet)this).getParameter("hide_progress_bar_message")));
  411.                ((Container)var82).add(this.progressBar);
  412.                ((Container)var26).add("South", var82);
  413.                this.progressBar.setProgressBarVisible(false);
  414.             } else {
  415.                this.progressBar = null;
  416.             }
  417.  
  418.             ((Container)this).add("Center", var26);
  419.             this.searchBox.selectAll();
  420.             this.searchBox.requestFocus();
  421.             ((Container)this).validate();
  422.          }
  423.       } else {
  424.          this.displayMessage = true;
  425.          System.err.println("SearchToHTML Applet can't start");
  426.          System.err.println("No files to search");
  427.          this.message = "Can't continue: no files to search.";
  428.          ((Component)this).repaint();
  429.       }
  430.    }
  431.  
  432.    public final String getAppletInfo() {
  433.       return appletInfo;
  434.    }
  435.  
  436.    public final String[][] getParameterInfo() {
  437.       return parameterInfo;
  438.    }
  439.  
  440.    public static final Color getColor(String var0) {
  441.       if (var0 == null) {
  442.          return null;
  443.       } else {
  444.          var0 = var0.toLowerCase();
  445.          if (var0.startsWith("#")) {
  446.             if (var0.length() != 7) {
  447.                return null;
  448.             } else {
  449.                try {
  450.                   int var1 = Integer.parseInt(var0.substring(1, 7), 16);
  451.                   return new Color(var1);
  452.                } catch (NumberFormatException var2) {
  453.                   return null;
  454.                }
  455.             }
  456.          } else if ("black".equalsIgnoreCase(var0)) {
  457.             return Color.black;
  458.          } else if ("blue".equalsIgnoreCase(var0)) {
  459.             return Color.blue;
  460.          } else if ("darkblue".equalsIgnoreCase(var0)) {
  461.             return Color.blue.darker().darker().darker();
  462.          } else if ("lightblue".equalsIgnoreCase(var0)) {
  463.             return Color.blue.brighter().brighter().brighter();
  464.          } else if ("cyan".equalsIgnoreCase(var0)) {
  465.             return Color.cyan;
  466.          } else if ("darkgray".equalsIgnoreCase(var0)) {
  467.             return Color.darkGray;
  468.          } else if ("lightgray".equalsIgnoreCase(var0)) {
  469.             return Color.lightGray;
  470.          } else if ("green".equalsIgnoreCase(var0)) {
  471.             return Color.green;
  472.          } else if ("gray".equalsIgnoreCase(var0)) {
  473.             return Color.gray;
  474.          } else if ("magenta".equalsIgnoreCase(var0)) {
  475.             return Color.magenta;
  476.          } else if ("orange".equalsIgnoreCase(var0)) {
  477.             return Color.orange;
  478.          } else if ("pink".equalsIgnoreCase(var0)) {
  479.             return Color.pink;
  480.          } else if ("red".equalsIgnoreCase(var0)) {
  481.             return Color.red;
  482.          } else if ("white".equalsIgnoreCase(var0)) {
  483.             return Color.white;
  484.          } else {
  485.             return "yellow".equalsIgnoreCase(var0) ? Color.yellow : Color.getColor(var0);
  486.          }
  487.       }
  488.    }
  489.  
  490.    public final String getParameter(String var1, String var2) {
  491.       String var3 = ((Applet)this).getParameter(var1);
  492.       return var3 != null ? var3 : var2;
  493.    }
  494.  
  495.    public static final String makeHTMLSafe(String var0) {
  496.       StringBuffer var1 = new StringBuffer();
  497.       int var3 = var0.length();
  498.  
  499.       for(int var4 = 0; var4 < var3; ++var4) {
  500.          char var2 = var0.charAt(var4);
  501.          if (var2 == '<') {
  502.             var1.append("<");
  503.          } else if (var2 == '>') {
  504.             var1.append(">");
  505.          } else if (var2 == '&') {
  506.             var1.append("&");
  507.          } else {
  508.             var1.append(var2);
  509.          }
  510.       }
  511.  
  512.       return var1.toString();
  513.    }
  514.  
  515.    public static final String replaceChar(String var0, char var1, String var2) {
  516.       if (var0.indexOf(var1) < 0) {
  517.          return var0;
  518.       } else {
  519.          StringBuffer var3 = new StringBuffer();
  520.          int var5 = var0.length();
  521.  
  522.          for(int var6 = 0; var6 < var5; ++var6) {
  523.             char var4 = var0.charAt(var6);
  524.             if (var4 == var1) {
  525.                var3.append(var2);
  526.             } else {
  527.                var3.append(var4);
  528.             }
  529.          }
  530.  
  531.          return var3.toString();
  532.       }
  533.    }
  534.  
  535.    public Insets insets() {
  536.       return this.insets;
  537.    }
  538.  
  539.    public void paint(Graphics var1) {
  540.       if (this.displayMessage) {
  541.          var1.drawString(this.message, 3, ((Component)this).size().height / 2);
  542.       }
  543.  
  544.    }
  545.  
  546.    public boolean keyUp(Event var1, int var2) {
  547.       if (var2 == 46 && (var1.modifiers & 4) != 0 || var2 == 27) {
  548.          this.stopStartButton.disable();
  549.          this.searchBox.disable();
  550.          this.disableCheckboxes();
  551.          this.stopSearching();
  552.          synchronized(this){}
  553.  
  554.          try {
  555.             if (this.frame != null) {
  556.                this.frame.setCursor(0);
  557.             }
  558.  
  559.             this.stopStartButton.setLabel(this.search_btn_txt);
  560.             this.stopStartButton.enable();
  561.             this.searchBox.enable();
  562.             this.searchBox.selectAll();
  563.             this.searchBox.requestFocus();
  564.             this.enableCheckboxes();
  565.          } catch (Throwable var5) {
  566.             throw var5;
  567.          }
  568.       }
  569.  
  570.       return false;
  571.    }
  572.  
  573.    public boolean action(Event var1, Object var2) {
  574.       if (var1.target == this.searchBox) {
  575.          this.searchBox.disable();
  576.          this.stopStartButton.disable();
  577.          this.disableCheckboxes();
  578.          this.stopSearching();
  579.          synchronized(this){}
  580.  
  581.          try {
  582.             if (this.frame != null) {
  583.                this.frame.setCursor(3);
  584.             }
  585.  
  586.             this.searchBox.disable();
  587.             this.stopStartButton.setLabel(this.stop_btn_txt);
  588.             this.stopStartButton.enable();
  589.             this.searching = true;
  590.             if (this.searchThread == null) {
  591.                this.searchThread = new Thread(this, "SearchToHTML");
  592.                this.searchThread.start();
  593.             }
  594.  
  595.             try {
  596.                this.notify();
  597.             } catch (IllegalMonitorStateException var22) {
  598.                ((Throwable)var22).printStackTrace();
  599.             }
  600.          } catch (Throwable var25) {
  601.             throw var25;
  602.          }
  603.       } else if (var1.target == this.stopStartButton) {
  604.          this.stopStartButton.disable();
  605.          this.searchBox.disable();
  606.          this.disableCheckboxes();
  607.          this.stopSearching();
  608.          if (this.search_btn_txt.equals(this.stopStartButton.getLabel())) {
  609.             synchronized(this){}
  610.  
  611.             try {
  612.                if (this.frame != null) {
  613.                   this.frame.setCursor(3);
  614.                }
  615.  
  616.                this.searchBox.disable();
  617.                this.stopStartButton.setLabel(this.stop_btn_txt);
  618.                this.searching = true;
  619.                if (this.searchThread == null) {
  620.                   this.searchThread = new Thread(this, "SearchToHTML");
  621.                   this.searchThread.start();
  622.                }
  623.  
  624.                try {
  625.                   this.notify();
  626.                } catch (IllegalMonitorStateException var21) {
  627.                   ((Throwable)var21).printStackTrace();
  628.                }
  629.             } catch (Throwable var23) {
  630.                throw var23;
  631.             }
  632.          } else {
  633.             synchronized(this){}
  634.  
  635.             try {
  636.                if (this.frame != null) {
  637.                   this.frame.setCursor(0);
  638.                }
  639.  
  640.                this.stopStartButton.setLabel(this.search_btn_txt);
  641.                this.searchBox.enable();
  642.                this.searchBox.selectAll();
  643.                this.searchBox.requestFocus();
  644.                this.enableCheckboxes();
  645.             } catch (Throwable var24) {
  646.                throw var24;
  647.             }
  648.          }
  649.  
  650.          this.stopStartButton.enable();
  651.       }
  652.  
  653.       return false;
  654.    }
  655.  
  656.    public synchronized void run() {
  657.       Thread var1 = Thread.currentThread();
  658.  
  659.       while(this.searchThread == var1) {
  660.          if (this.searching) {
  661.             StringBuffer var2 = new StringBuffer();
  662.             boolean var3 = this.ignoreTagsCheckbox.getState();
  663.             boolean var4 = this.exactCheckbox.getState();
  664.             String var5 = this.searchBox.getText();
  665.             if ("*version*".equals(var5)) {
  666.                System.out.println(this.getAppletInfo());
  667.             }
  668.  
  669.             var2.append(this.resultsPage);
  670.             var2.append('?');
  671.             var2.append(URLEncoder.encode(makeHTMLSafe(var5)));
  672.             var2.append(',');
  673.             if (var4) {
  674.                var2.append('y');
  675.             } else {
  676.                var2.append('n');
  677.             }
  678.  
  679.             if (var3) {
  680.                var2.append('y');
  681.             } else {
  682.                var2.append('n');
  683.             }
  684.  
  685.             var5 = var5.toLowerCase();
  686.             String[] var6;
  687.             if (this.phraseSearchesOnly) {
  688.                var6 = new String[]{var5};
  689.             } else {
  690.                var6 = parseSearchTerms(var5);
  691.             }
  692.  
  693.             if (this.displayProgressBar) {
  694.                if (!this.progressBarHasBeenUsed) {
  695.                   this.progressBarHasBeenUsed = true;
  696.                   this.progressBar.setProgressBarVisible(true);
  697.                }
  698.  
  699.                this.progressBar.setMaximumValue(this.numberOfDocuments);
  700.                this.progressBar.reset();
  701.             }
  702.  
  703.             SearchDocument[] var7 = new SearchDocument[this.numberOfDocuments];
  704.             int var8 = 0;
  705.             boolean var9 = false;
  706.  
  707.             for(int var10 = 0; var10 < this.documents.length && this.searching && var8 < this.maxNumOfMatches; ++var10) {
  708.                if (!this.documents[var10].isErrored()) {
  709.                   ((Applet)this).showStatus(this.documents[var10].getRelativeURL());
  710.  
  711.                   try {
  712.                      var9 = this.documents[var10].searchFor(var6, var4, var3, this.matchAllTermsCheckbox.getState());
  713.                      if (var9) {
  714.                         var7[var8] = this.documents[var10];
  715.                         ++var8;
  716.                         if (this.displayProgressBar) {
  717.                            this.progressBar.changeBy(1);
  718.                         }
  719.                      } else if (!this.documents[var10].isErrored()) {
  720.                         if (this.displayProgressBar) {
  721.                            this.progressBar.changeBy(1);
  722.                         }
  723.                      } else {
  724.                         --this.numberOfDocuments;
  725.                         if (this.displayProgressBar) {
  726.                            this.progressBar.setMaximumValue(this.numberOfDocuments);
  727.                         }
  728.                      }
  729.                   } catch (InterruptedException var17) {
  730.                      this.searching = false;
  731.                   }
  732.                }
  733.             }
  734.  
  735.             if (this.searching) {
  736.                for(int var11 = 0; var11 < var8; ++var11) {
  737.                   SearchDocument var12 = var7[var11];
  738.                   String var13 = var12.getDocumentTitle();
  739.                   String var14 = var12.getContext();
  740.                   String var15 = var12.getNearestAnchor();
  741.                   String var16 = var12.getDocumentInfo();
  742.                   var2.append(URLEncoder.encode(var12.getRelativeURL()));
  743.                   var2.append(':');
  744.                   if (var13 != null && this.sendTitles) {
  745.                      var2.append(URLEncoder.encode(var13));
  746.                   }
  747.  
  748.                   var2.append(':');
  749.                   if (var15 != null && this.sendAnchors) {
  750.                      var2.append(URLEncoder.encode(var15));
  751.                   }
  752.  
  753.                   var2.append(':');
  754.                   if (var16 != null && this.sendDocumentInfo) {
  755.                      var2.append(replaceChar(URLEncoder.encode(makeHTMLSafe(var16)), ',', "%2c"));
  756.                   }
  757.  
  758.                   var2.append(':');
  759.                   if (var14 != null && this.sendContext) {
  760.                      var2.append(URLEncoder.encode(var14));
  761.                   }
  762.  
  763.                   var2.append(',');
  764.                }
  765.  
  766.                String var22 = var2.toString();
  767.                var22 = replaceChar(var22, '+', "%20");
  768.  
  769.                try {
  770.                   URL var24 = new URL(this.searchBase + var22);
  771.                   ((Applet)this).getAppletContext().showDocument(var24, this.target);
  772.                } catch (MalformedURLException var19) {
  773.                   ((Throwable)var19).printStackTrace();
  774.                }
  775.             }
  776.          }
  777.  
  778.          if (this.searching) {
  779.             if (this.frame != null) {
  780.                this.frame.setCursor(0);
  781.             }
  782.  
  783.             this.stopStartButton.setLabel(this.search_btn_txt);
  784.             this.searchBox.enable();
  785.             this.searchBox.selectAll();
  786.             this.searchBox.requestFocus();
  787.             this.enableCheckboxes();
  788.             this.searching = false;
  789.          }
  790.  
  791.          try {
  792.             this.wait();
  793.          } catch (InterruptedException var18) {
  794.             ((Throwable)var18).printStackTrace();
  795.          }
  796.       }
  797.  
  798.    }
  799.  
  800.    private void disableCheckboxes() {
  801.       this.ignoreTagsCheckbox.disable();
  802.       this.exactCheckbox.disable();
  803.       this.matchAllTermsCheckbox.disable();
  804.    }
  805.  
  806.    private void enableCheckboxes() {
  807.       this.ignoreTagsCheckbox.enable();
  808.       this.exactCheckbox.enable();
  809.       this.matchAllTermsCheckbox.enable();
  810.    }
  811.  
  812.    private void stopSearching() {
  813.       this.searching = false;
  814.  
  815.       for(int var1 = 0; var1 < this.documents.length; ++var1) {
  816.          this.documents[var1].interruptSearch();
  817.       }
  818.  
  819.    }
  820.  
  821.    public void stop() {
  822.       this.stopSearching();
  823.       synchronized(this){}
  824.  
  825.       try {
  826.          this.searchThread = null;
  827.  
  828.          try {
  829.             this.notify();
  830.          } catch (IllegalMonitorStateException var6) {
  831.             ((Throwable)var6).printStackTrace();
  832.          }
  833.       } catch (Throwable var7) {
  834.          throw var7;
  835.       }
  836.  
  837.    }
  838.  
  839.    private static final String[] parseSearchTerms(String var0) {
  840.       StringTokenizer var1 = new StringTokenizer(var0, "\" \t\r\n,", true);
  841.       int var2 = var1.countTokens();
  842.       String[] var3 = new String[var2];
  843.       int var5 = 0;
  844.       StringBuffer var6 = new StringBuffer();
  845.       boolean var8 = false;
  846.  
  847.       while(var1.hasMoreTokens()) {
  848.          String var7 = var1.nextToken();
  849.          if ("\" \t\r\n,".indexOf(var7) != -1) {
  850.             if ("\"".equals(var7)) {
  851.                var8 = !var8;
  852.                if (var8) {
  853.                   var6.setLength(0);
  854.                } else if (var6.length() != 0) {
  855.                   var3[var5] = var6.toString();
  856.                   var6.setLength(0);
  857.                   ++var5;
  858.                }
  859.             } else if (var8) {
  860.                var6.append(var7);
  861.             }
  862.          } else if (!var8) {
  863.             var3[var5] = var7;
  864.             var6.setLength(0);
  865.             ++var5;
  866.          } else if (var8) {
  867.             var6.append(var7);
  868.          }
  869.       }
  870.  
  871.       if (var6.length() != 0) {
  872.          var3[var5] = var6.toString();
  873.          ++var5;
  874.       }
  875.  
  876.       String[] var4 = new String[var5];
  877.       System.arraycopy(var3, 0, var4, 0, var5);
  878.       return var4;
  879.    }
  880. }
  881.